package com.bookmanager.www.common.utils;


import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.crypto.hash.SimpleHash;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


/**
 * @author lixiao
 * @date 2019/7/31 17:11
 */
@Slf4j
public class CommonsUtils {


    /**
     * 获取当月最后一天
     */
    public static int lastDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.roll(Calendar.DAY_OF_MONTH, -1);
        return cal.getTime().getDate();
    }


    /**
     * 计算两个时间只差（单位天）
     * @param startTime
     * @param endTime
     * @return
     */
    public static long TimeSubtract(String startTime,String endTime){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date d1 = df.parse(startTime);
            Date d2 = df.parse(endTime);
            //相隔天数的总毫秒数
            long diff = d2.getTime() - d1.getTime();
            //天数 (1000 * 60 * 60 * 24)一天的毫秒数
            long days = diff / (1000 * 60 * 60 * 24);
            //小时，(1000* 60 * 60)一小时的毫秒数
            long hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);
            //分, (1000* 60)一分钟毫秒数
            long minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60);
            //秒 ,1000为1秒钟的毫秒数
            long ss = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60)-minutes*(1000* 60))/1000;
//            long ss = (diff % (1000 * 60 * 60 * 24) % (1000* 60 * 60) % (1000* 60) / 1000);
            System.out.println(""+days+"天"+hours+"小时"+minutes+"分"+ss+"秒");
            return days;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }


    /**
     * 手机号正则校验
     * @param phone 手机号
     * @return 校验是否成功
     */
    public static boolean phoneRegexCheck(String phone){
        if(phone.charAt(0)!='1')
        {
            return false;
        }
        if(phone.length()!=11){
            return false;
        }

        return true;
    }

    /**
     * 获取六位数验证码
     * @return 验证码
     */
    public static int getCode(){
        return (int)((Math.random()*9+1)*100000);
    }

    /**
     * 使用md5加密
     * @param password 需要加密的密码
     * @param salt 盐
     * @return 返回加密后的密码
     */
    public static String encryptPassword(String password, String salt){ //userId作为盐值
        return String.valueOf(new SimpleHash("MD5", password, salt, 1024));
    }

//    /**
//     * 获取请求域中的UserId
//     */
//    public static Integer getUserId(HttpServletRequest request){
//        return Integer.parseInt(request.getAttribute(Constant.USER_ID).toString());
//    }

}
